home *** CD-ROM | disk | FTP | other *** search
/ PCMania 64 / PCMania CD64_1.iso / phy / phy004 / files / articulo.011 < prev    next >
Encoding:
Text File  |  1997-06-07  |  5.8 KB  |  157 lines

  1. *cX                    RATON 
  2. *cR
  3.   Me he decidido a  escribir  este  artículo,
  4. porque mucha gente  queda  alucinada  al  ver
  5. algun trabajo que soporte  ratón,  cuando  es
  6. una de las cosas  más  fáciles  de  hacer,  y
  7. además muy efectiva, ya que da  un  toque  de
  8. profesionalidad a nuestros programas  con  el
  9. mínimo esfuerzo.
  10.   Cuando encendemos el ordenador,  el  driver
  11. del ratón se instala en la  interrupción  33h
  12. de la tabla de interrupciones. Por lo  tanto,
  13. para accder a las muchas  funciones  que  nos
  14. proporciona el  driver,  sólo  tendremos  que
  15. poner en los registros los valores  adecuados
  16. y llamar a la interrupción. (Si no sabéis que 
  17. es la  tabla  de  interrupciones,  da  igual,
  18. tampoco necesitais saberlo).
  19.   Para empezar, usaremos la función 00h. Para 
  20. llamarla, sólo tenemos que poner 
  21. *c4{ mov ax,00h
  22.   int 33h   } *cREl nº de la función siempre  en
  23. AX y al finalizar siempre llamar a la int 33h
  24.   Esta función hace un reset del ratón y  nos
  25. devuelve dos valores: en ax,  devuelve  *cFFFFFh*cR
  26. si hay un ratón instalado, y en bx el  nº  de
  27. botones que tiene. Una  vez  sabemos  que  el
  28. usuario tiene un ratón instalado, tenemos dos 
  29. funciones para esconder o mostrar  el  cursor
  30. del ratón (si no  lo  cambiamos  mostrarà  la
  31. flecha en modo gráfico  y  el  rectángulo  en
  32. modo texto).
  33.   Para ver el ratón usaremos  la  función  1h
  34. (seguro que ya sabéis llamarla: *cT mov  ax,01h*cR;
  35. *cWint 33h*cR) y para esconderlo,  la  función*cY  2h*cR.
  36. Aunque el ratón no se vea, se  sigue actuali-
  37. zando su posición.
  38.   Otras funciones interesantes,  de  las  que
  39. muchas que tenemos són:
  40.  
  41. *c1Poner el ratón en una determinada posición 
  42. *c2        función:*c30004h
  43. *c2        cx=*c3posx 
  44. *c2        dx=*c3posy    
  45.  
  46. *c1Limitar el movimiento  del  ratón  horizontal
  47. mente.
  48. *c2        Función:*c30007h
  49. *c2        cx=*c3minx
  50. *c2        dx=*c3maxx
  51.  
  52. *c1Limitar verticalmente
  53. *c2        Función:*c30008h
  54. *c2        cx=*c3miny
  55. *c2        dx=*c3maxy
  56. *cR
  57.   Ahora, para empezar a  utilizar  el  ratón,
  58. sólo nos queda por ver la   función  que  nos
  59. permitirá conocer su posición y si  los  boto
  60. nes están  apretados. Esta función es la 03h, 
  61. y nos devuelve cada vez que la llamamos:
  62. *c2        CX= *c3posición x de la rata
  63. *c2        DX= *c3posición y de la rata
  64. *c2        BX= *c3Sus  tres  últimos  bits   (lsb)
  65.             indican el estado de los botones.
  66. *c5                 Bit 0=*c8botón izquierdo  
  67. *c5                 Bit 1=*c8botón derecho    
  68. *c5                 Bit 2=*c8botón central
  69. *cR
  70.   Estos bits se ponen a uno cuando  el  botón
  71. está apretado, o sea que si bx  vale  1  está
  72. apretado el botón izquierdo, si vale  dos  el
  73. derecho, si tres el izquierdo y el derecho al 
  74. mismo tiempo...
  75.   Tenemos que estar atentos a las coordenadas 
  76. devueltas en CX y DX, ya  que  están  en  mic
  77. keys, que es la unidad de medida  del  ratón.
  78. Depende  de  que  modo  estemos   utilizando,
  79. tendremos que hacer una conversión a nuestras 
  80. coordenadas  (por  ejemplo  en  modo   texto,
  81. tendremos que  dividir  las  coordenadas  por
  82. ocho, o lo que  es  lo  mismo  desplazar  los
  83. registros tres bits a la derecha).
  84.   Ahora que ya podemos utilizar el  ratón  en
  85. nuestras apliaciones, vamos a ver otra manera 
  86. de controlar el ratón más  avanzada,y  lógica
  87. mente más difícil.
  88.   Veremos como controlar  el  ratón  mediante
  89. interrupción, con  este  método  conseguimos,
  90. que el ratón actualize su  posición  automáti
  91. camente, y no tengamos   que  ir  preguntando
  92. con la  función  anterior  (método  polling).
  93. Mediante este método podemos  hacer  que  una
  94. función nuestra sea llamada por el driver del 
  95. ratón cada vez que pase un  suceso  determina
  96. do. Esta función nuestra será la que  actuali
  97. zará las posiciones,y todas las  demás  cosas
  98. que queramos.
  99.   Para  hacer  esto  primero  tendremos   que
  100. instalar un controlador de  eventos,  al  que
  101. tenemos que decir la función a la  que  quere
  102. mos que llame y cuando tiene que llamarla.
  103. *c2
  104.         Función : *c30Ch
  105. *c2        ES:DX :*c3 segmento y desplazamiento  de
  106.                 nuestra  función CX:  máscara
  107.                 de eventos.
  108. *c4   Significado de la máscara
  109. *c8        bit 0:*c5 movimiento del ratón
  110. *c8        bit 1:*c5 pulsado botón izquierdo
  111. *c8        bit 2:*c5 soltado botón izquierdo
  112. *c8        bit 3:*c5 pulsado botón derecho 
  113. *c8        bit 4:*c5 soltado botón derecho
  114. *c8        bit 5:*c5 pulsado botón central 
  115. *c8        bit 6:*c5 soltado botón central
  116. *cR
  117.   Como siempre se pueden hacer combinaciones, 
  118. por ejemplo si ponemos*c9 cx=7  *cR(1+2+4)  nuestra
  119. función será llamada siempre que el ratón  se
  120. mueva, o se pulse o suelte el  botón  izquier
  121. do.
  122.   Este controlador que hemos instalado,  cada
  123. vez que llame a nuestra función, le pasará la 
  124. siguiente información: en AX tendremos  infor
  125. mación de los sucesos por  los  que  ha  sido
  126. llamada nuestra función y  de  otros  sucesos
  127. que se hayan podido producir,  con  el  mismo
  128. significado que la máscara de  CX  que  hemos
  129. visto antes. En CX la posición X, en DX la  Y
  130. y en BX el estado de los botones.
  131.   Antes de acabar  el  programa  tenemos  que
  132. desinstalar el controlador, para hacer  esto,
  133. lo más fácil és copiar la rutina  de  instala
  134. ción, pero poniendo en CX un 0, así  consegui
  135. mos que nuestra función no sea llamada nunca.
  136.  
  137.   Espero que os hayais enterado de algo y que 
  138. os sea útil. Si tenéis alguna duda o  comenta
  139. rio, podeís escribir a 
  140. *c2               cabsagjo@eupmt.upc.es
  141. *cR
  142. (eupmt=esculea universitaria  politécnica  de
  143. Mataró, un poco de publicidad no va  a  hacer
  144. daño a nadie) o:
  145. *c7
  146.                  Jordi Cabot
  147.               C/Josep Sabater 3
  148.                  08301 Mataró
  149.                   Barcelona
  150.  
  151. *cR
  152. ** Os pongo un ejemplo donde se ven algunas de 
  153. las  funciones  explicadas,  y  el  tema  del
  154. controlador  (lo  teneis  en  el   directorio
  155. "raton").
  156.  
  157.